class LoginController < ApplicationController

	def index
		
		
	end
	
	# Realiza login, valida usuario e senha
	def login
	
		# Obtem o usuario do formulario
		usr = params[:user]
		
		if usr["cpf_cnpj"] == "" or usr["pass"] == ""
			flash[:notice] = 'Por favor preencha CPF/CNPJ e senha.'
			render 'login/index'
		else
			#pesquisa o usuario
			#@user = User.find_by_email(usr["email"])
      
      auth = AuthenticationInfo.new.authenticate(usr["cpf_cnpj"], usr["pass"])
			
			if auth != "1"
				flash[:notice] = 'Usuario ou senha invalido.'
				render 'login/index'
			else
			
				# Inclui o usuario na sessao
				session['user'] = usr["cpf_cnpj"]
				
				# Atualiza a data de ultimo acesso
				#u = User.find(@user.id)  
				#u.last_access = Time.new
				#u.save
				
				# Pesquisa as informacoes do cliente na base de cliente
				cliente = UserInfo.new.consultarCliente(usr["cpf_cnpj"])
				session['cliente'] = cliente
				
				# redireciona para a home do sistema
				redirect_to(:controller => 'home', :action => 'index')
				
			end
		end
	
	end
	
	# Redireciona para a tela de cadastro de usuario
	def newuser
		render 'login/newuser'
	end	
	
	# Realiza o cadastro do usuario
	def adduser
	
		# Obtem os dados do cadastro
		usr_tmp = params[:user]
	
		# Trata cpf/cnpj
		usr_tmp["cpf_cnpj"] = usr_tmp["cpf_cnpj"].gsub('.', '').gsub('/', '').gsub('-', '')
	
		puts usr_tmp
		
		if usr_tmp["cpf_cnpj"].empty? or usr_tmp["email"].empty? or usr_tmp["pass_1"].empty? or usr_tmp["pass_2"].empty?
			flash[:notice] = 'Por favor preencha os campos obrigatorios.'
			render 'login/newuser'
	
		# Verifica se o usuario esta preenchido corretamente
		elsif usr_tmp["pass_1"] != usr_tmp["pass_2"]
			flash[:notice] = 'As senhas nao conferem favor verificar.'
			render 'login/newuser'
			
		# Verifica cpf e cnpj
		elsif (usr_tmp["cpf_cnpj"].length <= 11 and not check_cpf(usr_tmp["cpf_cnpj"])) or (usr_tmp["cpf_cnpj"].length > 11 and not check_cnpj(usr_tmp["cpf_cnpj"]))
			flash[:notice] = 'Cpf invalido.'
			render 'login/newuser'
		else		
			
			#pesquisa o 
			@user = User.find_by_cpf_cnpj(usr_tmp["cpf_cnpj"])
			if @user != nil
				flash[:notice] = 'Usuario ja cadastrado para esse cpf/cnpj.'
				render 'login/newuser'
			else
			
				# Realiza a consulta na base de clientes por cpf/cnpj
				cliente = UserInfo.new.consultarCliente(usr_tmp["cpf_cnpj"])
				puts cliente
				
				# Caso o cpf do cliente esteja na base
				if cliente[0] == 'OK'
			
					# Monta o novo usuario
					usr = User.new
					usr.cpf_cnpj = usr_tmp["cpf_cnpj"]
					usr.email = usr_tmp["email"]
					usr.pass = usr_tmp["pass_1"]
					usr.last_access = Time.new
					
					# Salva o registro na base
					usr.save
					
					render 'home/index'
				else
				
					flash[:notice] = 'O cadastro nao pode ser realizado.'
					render 'login/newuser'
				
				end
			end
		end
		
	
	end
	
	# Realiza logout do usuario
	def logout
	
		# limpa a sessao do usuario
		reset_session
		
		redirect_to(:controller => 'home', :action => 'index')
		
	end
	
	#------------------------------------------------------------------------------
	# Rotinas para verifica��o de CPF e CNPJ
	# Linguagem: Ruby
	# Escrito por: Andr� Camargo < andre@boaideia.inf.br > http://blog.boaideia.inf.br
	# Use, copie, melhore a vontade! Patches s�o bem-vindos...
	#------------------------------------------------------------------------------
	def check_cpf(cpf=nil)
		return false if cpf.nil?

		nulos = %w{12345678909 11111111111 22222222222 33333333333 44444444444 55555555555 66666666666 77777777777 88888888888 99999999999 00000000000}
		valor = cpf.scan /[0-9]/
		if valor.length == 11
			unless nulos.member?(valor.join)
			  valor = valor.collect{|x| x.to_i}
			  soma = 10*valor[0]+9*valor[1]+8*valor[2]+7*valor[3]+6*valor[4]+5*valor[5]+4*valor[6]+3*valor[7]+2*valor[8]
			  soma = soma - (11 * (soma/11))
			  resultado1 = (soma == 0 or soma == 1) ? 0 : 11 - soma
			  if resultado1 == valor[9]
				soma = valor[0]*11+valor[1]*10+valor[2]*9+valor[3]*8+valor[4]*7+valor[5]*6+valor[6]*5+valor[7]*4+valor[8]*3+valor[9]*2
				soma = soma - (11 * (soma/11))
				resultado2 = (soma == 0 or soma == 1) ? 0 : 11 - soma
				return true if resultado2 == valor[10] # CPF v�lido
			  end
			end
		  end
		  return false # CPF inv�lido
		end

	def check_cnpj(cnpj=nil)
	  return false if cnpj.nil?

	  nulos = %w{11111111111111 22222222222222 33333333333333 44444444444444 55555555555555 66666666666666 77777777777777 88888888888888 99999999999999 00000000000000}
	  valor = cnpj.scan /[0-9]/
	  if valor.length == 14
		unless nulos.member?(valor.join)
		  valor = valor.collect{|x| x.to_i}
		  soma = valor[0]*5+valor[1]*4+valor[2]*3+valor[3]*2+valor[4]*9+valor[5]*8+valor[6]*7+valor[7]*6+valor[8]*5+valor[9]*4+valor[10]*3+valor[11]*2
		  soma = soma - (11*(soma/11))
		  resultado1 = (soma==0 || soma==1) ? 0 : 11 - soma
		  if resultado1 == valor[12]
			soma = valor[0]*6+valor[1]*5+valor[2]*4+valor[3]*3+valor[4]*2+valor[5]*9+valor[6]*8+valor[7]*7+valor[8]*6+valor[9]*5+valor[10]*4+valor[11]*3+valor[12]*2
			soma = soma - (11*(soma/11))
			resultado2 = (soma == 0 || soma == 1) ? 0 : 11 - soma
			return true if resultado2 == valor[13] # CNPJ v�lido
		  end
		end
	  end
	  return false # CNPJ inv�lido
	end

end
